/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.view;

import com.example.android.apis.R;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.AbsListView;

import java.util.ArrayList;

/**
 * A list view that demonstrates the use of setEmptyView. This example alos uses
 * a custom layout file that adds some extra buttons to the screen.
 */
public class List8 extends ListActivity {

	PhotoAdapter mAdapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// Use a custom layout file
		setContentView(R.layout.list_8);

		// Tell the list view which view to display when the list is empty
		getListView().setEmptyView(findViewById(R.id.empty));

		// Set up our adapter
		mAdapter = new PhotoAdapter(this);
		setListAdapter(mAdapter);

		// Wire up the clear button to remove all photos
		Button clear = (Button) findViewById(R.id.clear);
		clear.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				mAdapter.clearPhotos();
			}
		});

		// Wire up the add button to add a new photo
		Button add = (Button) findViewById(R.id.add);
		add.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				mAdapter.addPhotos();
			}
		});
	}

	/**
	 * A simple adapter which maintains an ArrayList of photo resource Ids. Each
	 * photo is displayed as an image. This adapter supports clearing the list
	 * of photos and adding a new photo.
	 * 
	 */
	public class PhotoAdapter extends BaseAdapter {

		private Integer[] mPhotoPool = { R.drawable.sample_thumb_0,
				R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,
				R.drawable.sample_thumb_3, R.drawable.sample_thumb_4,
				R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,
				R.drawable.sample_thumb_7 };

		private ArrayList<Integer> mPhotos = new ArrayList<Integer>();

		public PhotoAdapter(Context c) {
			mContext = c;
		}

		public int getCount() {
			return mPhotos.size();
		}

		public Object getItem(int position) {
			return position;
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			// Make an ImageView to show a photo
			ImageView i = new ImageView(mContext);

			i.setImageResource(mPhotos.get(position));
			i.setAdjustViewBounds(true);
			i.setLayoutParams(new AbsListView.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
			// Give it a nice background
			i.setBackgroundResource(R.drawable.picture_frame);
			return i;
		}

		private Context mContext;

		public void clearPhotos() {
			mPhotos.clear();
			notifyDataSetChanged();
		}

		public void addPhotos() {
			int whichPhoto = (int) Math.round(Math.random()
					* (mPhotoPool.length - 1));
			int newPhoto = mPhotoPool[whichPhoto];
			mPhotos.add(newPhoto);
			notifyDataSetChanged();
		}

	}
}
